package leetcode.editor.cn;
//给定一个字符串
// s ，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。 
//
// 
//
// 示例 1： 
//
// 
//输入：s = "Let's take LeetCode contest"
//输出："s'teL ekat edoCteeL tsetnoc"
// 
//
// 示例 2: 
//
// 
//输入： s = "Mr Ding"
//输出："rM gniD"
// 
//
// 
//
// 提示： 
//
// 
// 1 <= s.length <= 5 * 10⁴ 
// 
// s 包含可打印的 ASCII 字符。 
// 
// s 不包含任何开头或结尾空格。 
// 
// s 里 至少 有一个词。 
// 
// s 中的所有单词都用一个空格隔开。 
// 
//
// Related Topics 双指针 字符串 👍 570 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
class Solution232 {

    public String reverseWords(String s) {
        String[] strings = s.split(" ");
        StringBuilder res = new StringBuilder();
        for (String string : strings) {
            res.append(new StringBuilder(string).reverse()).append(' ');
        }
        return res.deleteCharAt(res.length() - 1).toString();
    }

    public String reverseWords1(String s) {
        int start = 0;
        char[] chars = s.toCharArray();
        for (int i = 0; i < s.length(); i++) {
            if (chars[i] == ' ') {
                reverseStrIndex(chars, start, i - 1);
                start = i + 1;
            }
        }
        reverseStrIndex(chars, start, s.length() - 1);
        return new String(chars);
    }

    private void reverseStrIndex(char[] chars, int start, int end) {
        char c;
        while (start < end) {
            c = chars[start];
            chars[start] = chars[end];
            chars[end] = c;
            start++;
            end--;
        }
    }

    public static void main(String[] args) {
        Solution232 s = new Solution232();
        System.out.println(s.reverseWords("Let's take LeetCode contest"));
    }
}
//leetcode submit region end(Prohibit modification and deletion)
